unit main;\r
\r
{\r
- Copyright (C) 2005,2006 Olaf Klein, o.b.klein@gpsbabel.org\r
+ GPSBabelGUI main unit/formular\r
+\r
+ Copyright (C) 2005-2007 Olaf Klein, o.b.klein@gpsbabel.org\r
\r
This program is free software; you can redistribute it and/or modify\r
it under the terms of the GNU General Public License as published by\r
cbRoutes: TCheckBox;\r
cbTracks: TCheckBox;\r
lbWhat: TLabel;\r
- OpenDialog: TOpenDialog;\r
- SaveDialog: TSaveDialog;\r
+ dlgFileOpen: TOpenDialog;\r
+ dlgFileSave: TSaveDialog;\r
wptInputOK: TSpeedButton;\r
ImageList1: TImageList;\r
wptOutputOK: TSpeedButton;\r
trkInputOK: TSpeedButton;\r
trkOutputOK: TSpeedButton;\r
ActionList1: TActionList;\r
- acConvert: TAction;\r
+ acLetsGo: TAction;\r
btnFilter: TBitBtn;\r
acFilterSelect: TAction;\r
btnProcess: TBitBtn;\r
- memoOutput: TMemo;\r
stbMain: TStatusBar;\r
- MainMenu1: TMainMenu;\r
+ mnuMain: TMainMenu;\r
mnuFile: TMenuItem;\r
mnuExit: TMenuItem;\r
acFileExit: TAction;\r
mnuDebug: TMenuItem;\r
Createoptionspo1: TMenuItem;\r
acFileChangeLanguage: TAction;\r
- Changelanguage1: TMenuItem;\r
+ mnuChangeLanguage: TMenuItem;\r
N5: TMenuItem;\r
acFileExportCSV: TAction;\r
Createoptionscsv1: TMenuItem;\r
File1: TMenuItem;\r
Createoptionscsv2: TMenuItem;\r
sdOptional: TSaveDialog;\r
+ PopupMenu: TPopupMenu;\r
+ acSelectAll: TAction;\r
+ pmnuSelectAll: TMenuItem;\r
+ acCopySelected: TAction;\r
+ pmnuCopySelected: TMenuItem;\r
+ pmnuClearOutput: TMenuItem;\r
+ pmnuOutputtoscreen: TMenuItem;\r
+ acOptionsSynthesizeShortNames: TAction;\r
+ pmnuSynthesizeshortnames: TMenuItem;\r
+ pmnu6: TMenuItem;\r
+ pmnu7: TMenuItem;\r
+ pmnuForsourceformat: TMenuItem;\r
+ pmuFortargetformat: TMenuItem;\r
+ pmnu8: TMenuItem;\r
+ pmnuLetsgo: TMenuItem;\r
+ memoOutput: TMemo;\r
+ pmnuEnablecharactersettransformation: TMenuItem;\r
+ acOptionsNukeTypes: TAction;\r
+ pmnuForceselectedGPSdatatypesnuketypesfilter: TMenuItem;\r
+ pmnu9: TMenuItem;\r
+ pmnuFilter: TMenuItem;\r
procedure FormShow(Sender: TObject);\r
procedure FormCreate(Sender: TObject);\r
procedure OpenButtonClick(Sender: TObject);\r
procedure cbRoutesClick(Sender: TObject);\r
procedure cbTracksClick(Sender: TObject);\r
procedure sbSaveFileClick(Sender: TObject);\r
- procedure acConvertExecute(Sender: TObject);\r
+ procedure acLetsGoExecute(Sender: TObject);\r
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);\r
procedure acFilterSelectExecute(Sender: TObject);\r
procedure acFileExitExecute(Sender: TObject);\r
procedure FormClose(Sender: TObject; var Action: TCloseAction);\r
procedure chbOutputDeviceClick(Sender: TObject);\r
procedure acHelpReadmeExecute(Sender: TObject);\r
- procedure mnuSynthesizeShortNamesClick(Sender: TObject);\r
procedure edOutputFileKeyPress(Sender: TObject; var Key: Char);\r
procedure cbInputFormatDeviceChange(Sender: TObject);\r
procedure cbOutputFormatDeviceChange(Sender: TObject);\r
procedure btnInputOptsClick(Sender: TObject);\r
procedure acFileClearMemoExecute(Sender: TObject);\r
procedure acFinalizeDropDownsExecute(Sender: TObject);\r
- procedure mnuOptionsForceDataTypeClick(Sender: TObject);\r
procedure acOptionsEnableCharactersetTransformationExecute(\r
Sender: TObject);\r
procedure acFileOutputToScreenExecute(Sender: TObject);\r
procedure acFileExportCSVExecute(Sender: TObject);\r
procedure cbOutputDeviceChange(Sender: TObject);\r
procedure cbInputDeviceChange(Sender: TObject);\r
+ procedure acSelectAllExecute(Sender: TObject);\r
+ procedure acCopySelectedExecute(Sender: TObject);\r
+ procedure PopupMenuPopup(Sender: TObject);\r
+ procedure acOptionsSynthesizeShortNamesExecute(Sender: TObject);\r
+ procedure acOptionsNukeTypesExecute(Sender: TObject);\r
private\r
{ Private-Deklarationen }\r
FCaps: TCapabilities;\r
procedure TfrmMain.FormCreate(Sender: TObject);\r
begin\r
MakeFirstTranslation(Self);\r
-\r
FFirstShow := True;\r
\r
+ RestoreBounds('main_form', Self);\r
+\r
TP_Ignore(mnuDebug, 'mnuDebug');\r
{$IFOPT D-}\r
mnuDebug.Visible := False;\r
FCaps := TCapabilities.Create;\r
FOpts := TOptions.Create(FCaps);\r
\r
- OpenDialog.InitialDir := ReadProfile(OpenDialog.Tag);\r
- SaveDialog.InitialDir := ReadProfile(SaveDialog.Tag);\r
+ dlgFileOpen.InitialDir := ReadProfile(dlgFileOpen.Tag);\r
+ dlgFileSave.InitialDir := ReadProfile(dlgFileSave.Tag);\r
\r
if not ComboBoxSelect(cbInputDevice, ReadProfile(cbInputDevice.Tag)) then\r
cbInputDevice.ItemIndex := 0;\r
\r
FCaps.List := l;\r
FOpts.List := l;\r
- InitCombo(cbInputFormatDevice, False, True);\r
- InitCombo(cbOutputFormatDevice, True, True);\r
+ InitCombo(cbInputFormatDevice, True, True);\r
+ InitCombo(cbOutputFormatDevice, False, True);\r
InitCombo(cbInputFormat, True, False);\r
InitCombo(cbOutputFormat, False, False);\r
finally\r
procedure TfrmMain.OpenButtonClick(Sender: TObject);\r
var\r
s: string;\r
+ i: Integer;\r
begin\r
- OpenDialog.Filter := '';\r
- OpenDialog.DefaultExt := '*.*';\r
+ dlgFileOpen.Filter := '';\r
+ dlgFileOpen.DefaultExt := '*.*';\r
\r
if (cbInputFormat.Text <> '') then\r
s := cbInputFormat.Text + '|*.' + FCaps.GetExt(cbInputFormat.Text) + '|';\r
s := s + _('All files|*.*');\r
\r
- OpenDialog.Filter := s;\r
- if not SELF.OpenDialog.Execute then Exit;\r
+ dlgFileOpen.Filter := s;\r
+ if not SELF.dlgFileOpen.Execute then Exit;\r
+\r
+ edInputFile.Text := '';\r
+ for i := 0 to dlgFileOpen.Files.Count - 1 do\r
+ begin\r
+ s := dlgFileOpen.Files[i];\r
+ if (Pos('"', s) <> 0) or (Pos(' ', s) <> 0) or (Pos(',', s) <> 0) then\r
+ s := AnsiQuotedStr(s, '"');\r
+ if (edInputFile.Text <> '') then edInputFile.Text := edInputFile.Text + ', ';\r
+ edInputFile.Text := edInputFile.Text + s;\r
+ end;\r
\r
- edInputFile.Text := OpenDialog.FileName;\r
CheckInput;\r
end;\r
\r
ac := acOptionsSourceFormat;\r
acOptionsSourceFormat.Caption := _('Input') + ': ' + Format;\r
btnInputOpts.Caption := '';\r
-// ImageList1.GetBitmap(11, btnInputOpts.Glyph);\r
end\r
else begin\r
edOutputOpts.Text := '';\r
ac := acOptionsTargetFormat;\r
acOptionsTargetFormat.Caption := _('Output') + ': ' + Format;\r
btnOutputOpts.Caption := '';\r
-// ImageList1.GetBitmap(11, btnOutputOpts.Glyph);\r
end;\r
\r
ac.Enabled := FOpts.HasFormatOpts(Format);\r
\r
procedure TfrmMain.CheckInput;\r
begin\r
- acConvert.Enabled :=\r
+ acLetsGo.Enabled :=\r
(cbWaypoints.Checked or cbRoutes.Checked or cbTracks.Checked)\r
and\r
(\r
var\r
s: string;\r
begin\r
- SaveDialog.Filter := '';\r
- SaveDialog.DefaultExt := '*.*';\r
+ dlgFileSave.Filter := '';\r
+ dlgFileSave.DefaultExt := '*.*';\r
\r
if (cbOutputFormat.Text <> '') then\r
s := cbOutputFormat.Text + '|*.' + FCaps.GetExt(cbOutputFormat.Text) + '|';\r
s := s + _('All files|*.*');\r
\r
- SaveDialog.Filter := s;\r
- if not SELF.SaveDialog.Execute then Exit;\r
+ dlgFileSave.Filter := s;\r
+ if not SELF.dlgFileSave.Execute then Exit;\r
\r
- edOutputFile.Text := SaveDialog.FileName;\r
+ edOutputFile.Text := dlgFileSave.FileName;\r
CheckInput;\r
end;\r
\r
-procedure TfrmMain.acConvertExecute(Sender: TObject);\r
+procedure TfrmMain.acLetsGoExecute(Sender: TObject);\r
var\r
cmdline: string;\r
- list: TStrings;\r
+ list, files: TStrings;\r
CSave: TCursor;\r
str: TStream;\r
s, tmp: string;\r
i: Integer;\r
- IFormat, OFormat: string;\r
+ IFormat, OFormat, IFiles: string;\r
Fatal: Boolean;\r
+ sp: PChar;\r
\r
begin\r
- btnProcess.Enabled := False;\r
+ acLetsGo.Enabled := False;\r
try\r
acFinalizeDropDownsExecute(nil);\r
\r
if cbRoutes.Checked then cmdline := cmdline + ' -r';\r
if cbTracks.Checked then cmdline := cmdline + ' -t';\r
\r
- if mnuSynthesizeShortNames.Checked then cmdline := cmdline + ' -s';\r
+ if acOptionsSynthesizeShortNames.Checked then cmdline := cmdline + ' -s';\r
\r
if chbInputDevice.Checked then\r
begin\r
- s := SysUtils.AnsiLowerCase(cbInputDevice.Text) + ':';\r
+ IFiles := '-f ' + SysUtils.AnsiLowerCase(cbInputDevice.Text) + ':';\r
// if (s = 'usb:') then\r
// s := s + '-1';\r
end\r
else\r
begin\r
- s := edInputFile.Text;\r
- if not(FileExists(s)) then\r
- raise eGPSBabelError.CreateFmt(_('File %s not found.'), [s]);\r
- s := '"' + s + '"';\r
+ IFiles := '';\r
+ files := TStringList.Create;\r
+ try\r
+ if (edInputFile.Text[1] <> '"') then\r
+ files.CommaText := AnsiQuotedStr(edInputFile.Text, '"')\r
+ else\r
+ files.CommaText := edInputFile.Text;\r
+ for i := 0 to files.Count - 1 do\r
+ begin\r
+ s := files.Strings[i];\r
+ if not(FileExists(s)) then\r
+ raise eGPSBabelError.CreateFmt(_('File %s not found.'), [s]);\r
+ if (IFiles <> '') then IFiles := IFiles + ' ';\r
+ IFiles := IFiles + '-f ' + AnsiQuotedStr(s, '"');\r
+ end;\r
+ finally\r
+ files.Free;\r
+ end;\r
end;\r
\r
// Input character set\r
[cmdline, cbInputLang.Text]);\r
\r
if (Trim(edInputOpts.Text) <> '') then\r
- cmdline := Format('%s -i %s,%s -f %s',\r
- [cmdline, IFormat, Trim(edInputOpts.Text), s])\r
+ cmdline := Format('%s -i %s,%s %s',\r
+ [cmdline, IFormat, Trim(edInputOpts.Text), IFiles])\r
else\r
- cmdline := Format('%s -i %s -f %s',\r
- [cmdline, IFormat, s]);\r
+ cmdline := Format('%s -i %s %s',\r
+ [cmdline, IFormat, IFiles]);\r
\r
if mnuOptionsForceDataType.Checked then\r
begin\r
s := '';\r
if not(cbWaypoints.Checked) then\r
- s := s + ',waypoints'; \r
+ s := s + ',waypoints';\r
if not(cbRoutes.Checked) then\r
s := s + ',routes';\r
if not(cbTracks.Checked) then\r
end;\r
end\r
else begin\r
- s := edOutputFile.Text;\r
+ s := Trim(edOutputFile.Text);\r
+ if (s <> '') and (s[1] <> '"') then s := AnsiQuotedStr(s, '"');\r
+ if (CharCount(s, '"') mod 2 <> 0) then\r
+ begin\r
+ MessageDlg(_('Invalid usage of character ''"''!'), mtError, [mbOK], 0);\r
+ Exit;\r
+ end;\r
+ sp := PChar(s);\r
+ tmp := AnsiExtractQuotedStr(sp, '"');\r
+ if (tmp <> '') then s := tmp;\r
\r
if (s <> '-') then\r
begin\r
if FileExists(s) then\r
begin\r
- tmp := _('Warning');\r
- if (Windows.MessageBox(SELF.Handle,\r
- PChar(Format(_('File "%s" exists ! Overwrite ?'), [s])),\r
- PChar(tmp), MB_YESNO) <> IDYES) then Exit;\r
+ if (MessageDlg(Format(_('File "%s" exists ! Overwrite ?'), [s]),\r
+ mtWarning, [mbYes, mbNO], 0) <> mrYes) then Exit;\r
end\r
else\r
begin\r
str := TFileStream.Create(s, fmCreate);\r
str.Free;\r
end;\r
- s := '"' + s + '"';\r
+ s := AnsiQuotedStr(s, '"');\r
end\r
else\r
s := '-';\r
CSave := Cursor;\r
list := TStringList.Create;\r
try\r
- Cursor := crHourGlass;\r
- Application.ProcessMessages;\r
+ Cursor := crHourGlass; // doesn't work ???\r
+ Application.ProcessMessages; // doesn't work ???\r
Sleep(50);\r
\r
if not gpsbabel(cmdline, list, @Fatal, False) then\r
end;\r
\r
finally\r
- btnProcess.Enabled := True;\r
+ acLetsGo.Enabled := True;\r
end;\r
end;\r
\r
var\r
s: string;\r
begin\r
- s := SysUtils.ExtractFilePath(edInputFile.Text);\r
+ if (dlgFileOpen.Files.Count > 0) then\r
+ s := SysUtils.ExtractFilePath(dlgFileOpen.Files[0])\r
+ else\r
+ s := SysUtils.ExtractFilePath(dlgFileOpen.FileName);\r
if (s <> '') then\r
- StoreProfile(OpenDialog.Tag, s);\r
- s := SysUtils.ExtractFilePath(edOutputFile.Text);\r
+ StoreProfile(dlgFileOpen.Tag, s);\r
+ if (edOutputFile.Text = '-') then\r
+ s := dlgFileSave.InitialDir\r
+ else\r
+ s := SysUtils.ExtractFilePath(edOutputFile.Text);\r
if (s <> '') then\r
- StoreProfile(SaveDialog.Tag, s);\r
+ StoreProfile(dlgFileSave.Tag, s);\r
StoreProfile(cbInputFormat.Tag, cbInputFormat.Text);\r
StoreProfile(cbOutputFormat.Tag, cbOutputFormat.Text);\r
StoreProfile(cbInputDevice.Tag, cbInputDevice.Text);\r
- StoreProfile(cbInputFormatDevice.Tag, cbInputFormatDevice.Text); \r
+ StoreProfile(cbInputFormatDevice.Tag, cbInputFormatDevice.Text);\r
StoreProfile(cbOutputDevice.Tag, cbOutputDevice.Text);\r
StoreProfile(cbOutputFormatDevice.Tag, cbOutputFormatDevice.Text);\r
StoreProfile(edInputFile.Tag, edInputFile.Text);\r
procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);\r
begin\r
StoreProfiles;\r
+ StoreBounds('main_form', Self);\r
end;\r
\r
procedure TfrmMain.chbOutputDeviceClick(Sender: TObject);\r
end;\r
end;\r
\r
-procedure TfrmMain.mnuSynthesizeShortNamesClick(Sender: TObject);\r
-begin\r
- mnuSynthesizeShortNames.Checked := not(mnuSynthesizeShortNames.Checked);\r
-end;\r
-\r
procedure TfrmMain.edOutputFileKeyPress(Sender: TObject; var Key: Char);\r
begin\r
FOutHandmade := True;\r
acFinalizeDropDowns.Execute;\r
end;\r
\r
-procedure TfrmMain.mnuOptionsForceDataTypeClick(Sender: TObject);\r
-begin\r
- mnuOptionsForceDataType.Checked := not(mnuOptionsForceDataType.Checked);\r
-end;\r
-\r
procedure TfrmMain.acOptionsEnableCharactersetTransformationExecute(\r
Sender: TObject);\r
begin\r
edOutputFile.Color := edInputFile.Color;\r
chbOutputDevice.Enabled := True;\r
edOutputFile.Enabled := True;\r
+ edOutputFile.Text := '';\r
HistoryChanged(edOutputFile, True);\r
sbSaveFile.Enabled := True;\r
end;\r
end;\r
end;\r
\r
+procedure TfrmMain.acSelectAllExecute(Sender: TObject);\r
+begin\r
+ memoOutput.SetFocus;\r
+ memoOutput.SelectAll;\r
+end;\r
+\r
+procedure TfrmMain.acCopySelectedExecute(Sender: TObject);\r
+begin\r
+ memoOutput.SetFocus;\r
+ memoOutput.CopyToClipboard;\r
+end;\r
+\r
+procedure TfrmMain.PopupMenuPopup(Sender: TObject);\r
+begin\r
+ pmnuSelectAll.Caption := dgettext('delphi', pmnuSelectAll.Caption);\r
+ pmnuCopySelected.Caption := dgettext('delphi', pmnuCopySelected.Caption);\r
+ pmnuClearOutput.Caption := dgettext('delphi', pmnuClearOutput.Caption);\r
+ \r
+ pmnuSelectAll.Enabled := (memoOutput.Lines.Count > 0);\r
+ pmnuCopySelected.Enabled := (memoOutput.Lines.Count > 0);\r
+ pmnuClearOutput.Enabled := (memoOutput.Lines.Count > 0);\r
+end;\r
+\r
+procedure TfrmMain.acOptionsSynthesizeShortNamesExecute(Sender: TObject);\r
+begin\r
+ acOptionsSynthesizeShortNames.Checked := not(acOptionsSynthesizeShortNames.Checked);\r
+end;\r
+\r
+procedure TfrmMain.acOptionsNukeTypesExecute(Sender: TObject);\r
+begin\r
+ acOptionsNukeTypes.Checked := not(acOptionsNukeTypes.Checked);\r
+end;\r
+\r
end.\r
unit utils;\r
\r
{\r
- Copyright (C) 2005,2006 Olaf Klein, o.b.klein@gpsbabel.org\r
+ Copyright (C) 2005-2007 Olaf Klein, o.b.klein@gpsbabel.org\r
\r
This program is free software; you can redistribute it and/or modify\r
it under the terms of the GNU General Public License as published by\r
uses\r
gnugettext,\r
Windows, SysUtils, Classes, StdCtrls, ComCtrls,\r
- Registry, ShellAPI;\r
+ Registry, ShellAPI, Forms;\r
\r
type\r
PBoolean = ^Boolean;\r
Fatal: PBoolean = nil; OEMStrings: Boolean = True): Boolean;\r
\r
function GetShortName(const PathName: string): string;\r
-procedure StoreProfile(const Tag: Integer; const Value: string);\r
+\r
+procedure StoreProfile(const Tag: Integer; const Value: string); overload;\r
+procedure StoreProfile(const Tag, Value: string); overload;\r
+\r
function ReadProfile(const Tag: Integer; const Default: string = ''): string; overload;\r
function ReadProfile(const Name: string; const Default: string = ''): string; overload;\r
\r
\r
function HasUpDown(E: TEdit; var UpDown: TUpdown): Boolean;\r
\r
+procedure StoreBounds(const Name: string; AForm: TForm);\r
+procedure RestoreBounds(const Name: string; AForm: TForm);\r
+\r
+function CharCount(const Str: string; const Ch: Char): Integer;\r
+\r
implementation\r
\r
uses\r
- Forms,\r
common;\r
\r
function GetShortName(const PathName: string): string;\r
end;\r
end;\r
\r
+procedure StoreProfile(const Tag, Value: string);\r
+var\r
+ reg: TRegistry;\r
+begin\r
+ reg := TRegistry.Create;\r
+ try\r
+ reg.RootKey := HKEY_CURRENT_USER;\r
+ if reg.OpenKey('\SOFTWARE\GPSBabel', True) then\r
+ begin\r
+ reg.WriteString(Tag, Value);\r
+ end;\r
+ finally\r
+ reg.Free;\r
+ end;\r
+end;\r
+\r
function ReadProfile(const Tag: Integer; const Default: string): string; // overload;\r
var\r
str: string;\r
end;\r
end;\r
\r
+procedure StoreBounds(const Name: string; AForm: TForm);\r
+var\r
+ str: string;\r
+begin\r
+ if (AForm = nil) then Exit;\r
+\r
+ if (AForm.WindowState = wsMaximized) then str := 'Y' else str := 'N';\r
+ str := Format('%s,%d,%d,%d,%d', [str,\r
+ AForm.Left, AForm.Top, AForm.Width, AForm.Height]);\r
+ StoreProfile(Name, str);\r
+end;\r
+\r
+procedure RestoreBounds(const Name: string; AForm: TForm);\r
+var\r
+ str: string;\r
+ idx: Integer;\r
+ lst: TStringList;\r
+ bds: TRect;\r
+begin\r
+ if (AForm = nil) then Exit;\r
+\r
+ str := ReadProfile(Name);\r
+ if (str = '') then Exit;\r
+\r
+ lst := TStringList.Create;\r
+ try\r
+ lst.Sorted := False;\r
+ lst.Duplicates := dupAccept;\r
+ lst.CommaText := str;\r
+ try\r
+ AForm.Position := poDesigned;\r
+\r
+ if (StrUpper(PChar(lst[0])) = 'Y') then AForm.WindowState := wsMaximized\r
+ else AForm.WindowState := wsNormal;\r
+\r
+ bds.Left := StrToInt(lst[1]);\r
+ bds.Top := StrToInt(lst[2]);\r
+ bds.Right := bds.Left + StrToInt(lst[3]);\r
+ bds.Bottom := bds.Top + StrToInt(lst[4]);\r
+\r
+ AForm.BoundsRect := bds;\r
+ \r
+ except\r
+ on E: Exception do;\r
+ end;\r
+ finally\r
+ lst.Free;\r
+ end;\r
+end;\r
+\r
+function CharCount(const Str: string; const Ch: Char): Integer;\r
+var\r
+ i, len: Integer;\r
+begin\r
+ Result := 0;\r
+ len := Length(Str);\r
+ for i := 1 to len do\r
+ if (Str[i] = Ch) then\r
+ Inc(Result);\r
+end;\r
\r
var\r
hMutex: THandle;\r
- \r
+\r
initialization\r
\r
// Flag for InnoSetup\r